package top.foxhome.web.spiders.util;

/**
 * 负责Url的构建以及url处理
 */
public class UrlUtil {
    /**
     * 负责元素构建
     *
     * @param str  href
     * @param curr 当前页面url
     * @param host 主机地址格式为http[s]://ssss.sss/
     * @return
     */
    public static String buildUrl(String str, String curr, String host) {
        str = str.replace(" ", "");
        if (str.length() == 0) return null;
        if (str.startsWith("javascript:")) return null;
        if (str.startsWith("#")) return null;
        //如果以/开头则对url进行拼接
        if (str.startsWith("//")) {//处理 //www.12377.cn/ 这类情况
            return host.substring(0, host.lastIndexOf("://") + 1) + str.substring(str.indexOf("//"), str.length());
        } else if (str.startsWith("http://") || str.startsWith("https://")) {
            return str;
        } else if (str.startsWith("/")) {
            if (host.endsWith("/"))
                return host.substring(0, host.lastIndexOf("/") + 1) + str;
            else
                return host + str;
        } else {
            return curr + "/" + str;
        }
    }

    public static String base64ToFileName(String str) {
        if (str == null || str.length() == 0) return str;
        String mimeType = str.substring(str.lastIndexOf("/") + 1, str.lastIndexOf(";"));
        String data = str.substring(str.lastIndexOf(",") + 1);
        return "base64_" + (data.length() > 20 ? data.substring(0, 20) : data) + "." + mimeType;
    }

    public static String urlToFileName(String str) {
        if (str == null || str.length() == 0) return str;
        if (str.contains("?")) {//某些情况会遇到带参数的图片地址因此需要将其移除
            int formatIndex = str.lastIndexOf('.');
            int parIndex = str.lastIndexOf('?');
            // /news_logo.png?22323=223&22323" 处理点在前面?号在后面的情况
            if (formatIndex < parIndex) {
                return str.substring(str.lastIndexOf('/') + 1, parIndex);
            } else { // /xxx?img=news_logo.png
                return str.substring(parIndex + 1).replace("?", "_").replace("&", "_");
            }

        } else
            return str.substring(str.lastIndexOf('/') + 1);
    }

    /**
     * 判断是否属于站外链接
     *
     * @param url
     * @param host
     * @return
     */
    public static boolean isOffSiteLinks(String url, String host) {
        return !url.startsWith(host);
    }

    public static boolean isBase64ImageData(String url) {
        if (url == null || url.length() == 0) return false;
        //判断是否为base64数据
        //data:image/png;base64,
        return url.matches("/{0,1}(data:image/(png|jpeg);base64,[A-Za-z0-9+/=]+)");
    }
}
